package com.san.metadata.service;

import java.util.List;

import com.san.common.utils.PageUtils;
import com.san.common.utils.Query;
import com.san.metadata.domain.ColumnDTO;
import com.san.metadata.domain.DataSourceDO;
import com.san.metadata.domain.ManageColumnsDO;
import com.san.metadata.domain.ManageTableDO;
import com.san.metadata.domain.TableDTO;
import com.san.metadata.vo.ManageColumnsVO;

/**
 * 管理元数据服务类
 * 
 * @author hulp
 *
 */
public interface ManageMetadataService {

	/**
	 * 查询技术元数据
	 * 
	 * @param query
	 * @return
	 */
	PageUtils list(Query query) throws Exception;

	/**
	 * 获取所有管理元数据表
	 * 
	 * @param query
	 * @return
	 */
	List<TableDTO> listManageTable() throws Exception;

	/**
	 * 获取指定管理元数据表字段
	 * 
	 * @param string
	 * @return
	 * @throws Exception
	 */
	List<ColumnDTO> listManageColumns(Long tableId) throws Exception;

	/**
	 * 保存技术元数据
	 * 
	 * @param manageTableDO
	 * @return
	 * @throws Exception
	 */
	int save(ManageTableDO manageTableDO) throws Exception;

	/**
	 * 更新技术元数据
	 * 
	 * @param manageTableDO
	 * @return
	 * @throws Exception
	 */
	int doEdit(ManageTableDO manageTableDO) throws Exception;

	/**
	 * 删除技术元数据
	 * 
	 * @param tableId
	 * @return
	 * @throws Exception
	 */
	int remove(Long tableId) throws Exception;

	/**
	 * 批量删除技术元数据
	 * 
	 * @param tableIds
	 * @return
	 * @throws Exception
	 */
	int batchRemove(Long[] tableIds) throws Exception;

	/**
	 * 获取单条技术元数据
	 * 
	 * @param tableId
	 * @return
	 * @throws Exception
	 */
	ManageTableDO getById(Long tableId) throws Exception;

	/**
	 * 保存字段信息
	 * 
	 * @param manageColumnsVO
	 * @return
	 * @throws Exception
	 */
	int saveColumn(ManageColumnsVO manageColumnsVO) throws Exception;

	/**
	 * 创建管理元数据表
	 * 
	 * @param sourceType          数据源类型
	 * @param tableId             管理元数据表ID
	 * @param targetDataSourceDO  目标数据源
	 * @param manageColumnsVOList 管理元数据字段信息List
	 * @return
	 */
	boolean saveTable(int sourceType, Long tableId, DataSourceDO targetDataSourceDO,
			List<ManageColumnsVO> manageColumnsVOList);

	/**
	 * 根据字段id查询字段名称
	 * 
	 * @param columnId 管理元数据字段ID
	 * @return
	 * @throws Exception
	 */
	ColumnDTO getColumnById(Long columnId) throws Exception;

	/**
	 * 根据管理元数据字段ID集合 获取中文描述
	 * 
	 * @param columnIds 管理元数据字段ID集合
	 * @return
	 * @throws Exception
	 */
	List<String> listColumnByIds(String columnIds) throws Exception;

	/**
	 * 根据管理元数据表ID查询该表拥有的所有字段信息
	 * 
	 * @param tableId 管理元数据表ID
	 * @return
	 * @throws Exception
	 */
	List<ManageColumnsDO> allManageColumns(Long tableId) throws Exception;

	/**
	 * 根据管理元数据表类型查询表
	 * 
	 * @param dataType 管理元数据表类型
	 * @return
	 * @throws Exception
	 */
	List<TableDTO> listTable1(int dataType) throws Exception;

	/**
	 * 根据管理元数据表类型集合查询表
	 * 
	 * @param dataType 管理元数据表类型集合
	 * @return
	 * @throws Exception
	 */
	List<TableDTO> listTable2(int[] dataType) throws Exception;

	/**
	 * 批量更新管理元数据字段信息
	 * 
	 * @param ManageColumnsVOList 管理元数据字段信息List
	 * @return
	 */
	int batchColumnsUpdate(List<ManageColumnsVO> ManageColumnsVOList);
	
	/**
	 * 通过管理元数据表名称获取表信息
	 * @param name 管理元数据表名
	 * @return
	 * @throws Exception
	 */
	ManageTableDO getByName(String name) throws Exception;

}
